package com.haolp.sys.dao;

import com.haolp.sys.common.vo.SysUserDeptVo;
import com.haolp.sys.pojo.SysLog;
import com.haolp.sys.pojo.SysUser;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author 小李
 * @version 1.0
 * @date 2021/10/5 16:28
 */
public interface SysUserDao {
    /**
     * 基于用户名查询用户信息
     *
     * @param username
     * @return
     */
    @Select("select * from sys_users where username=#{username}")
    SysUser findUserByUserName(String username);

    /**
     * 查询有多少个员工的方法
     *
     * @param id
     * @return
     */
    @Select("select count(*)from sys_users where deptId=#{deptId}")
    int getUserCountByDeptId(Integer id);

    /**
     * 更新用户自身信息
     *
     * @param sysUser
     * @return
     */
    int updateObject(SysUser sysUser);

    /**
     * 基于用户id查询用户及对应的部门信息
     *
     * @param id
     * @return
     */
    SysUserDeptVo findObjectById(Integer id);

    /**
     * 负责将用户信息写入数据库
     *
     * @param sysUser
     * @return
     */
    int insertObject(SysUser sysUser);

    /**
     * 禁用或启用用户信息
     *
     * @param id           用户id
     * @param valid        状态，0表示禁用，1表示启用(默认值)
     * @param modifiedUser 修改用户
     * @return
     */
    int validById(
            @Param("id") Integer id,
            @Param("valid") Integer valid,
            @Param("modifiedUser") String modifiedUser);

    /**
     * 基于添加查询总记录数
     *
     * @param username 查询条件
     * @return 总记录数（基于该返回值计算总页数）
     */
    int getRowCount(@Param("username") String username);

    /**
     * 基于条件分页查询日志信息
     *
     * @param username   查询条件
     * @param startIndex 起始位置
     * @param pageSize   当前页码大小
     * @return 当前页的日志记录信息
     * 数据库中每条日志信息封装到SysLog对象中
     */
    List<SysUserDeptVo> findPageObjects(@Param("username") String username,
                                        @Param("startIndex") Integer startIndex,
                                        @Param("pageSize") Integer pageSize);

    /**
     * @param haseNewPwd
     * @param salt
     * @param id
     * @return
     */
    @Update("update sys_users set password=#{haseNewPwd}," +
            "salt=#{salt},modifiedTime=now() where id=#{id}")
    int updatePassword(
            @Param("haseNewPwd") String haseNewPwd,
            @Param("salt") String salt,
            @Param("id") Integer id);

}
